Arbeitsblatt 4

Autor:

Anna Drewek

Version vom:

6. Oktober 2024

Aufgabe 1: Diabetes

Verwenden Sie die diabetes Daten des R-Pakets VIM. Die Daten umfassen folgende medizinische Angaben zu 768 Patientinnen. Die Angabe zu Diabetes (Outcome) wird als Zielvariable, und die übrigen Angaben wie Anzahl Schwangerschaften (Pregnancies) werden als erklärende Variablen betrachtet. Die Daten stammen aus einer grösseren Datenbank und es wurden mehrere Einschränkungen gemacht. Insbesondere sind alle Patienten weiblich, mindestens 21 Jahre alt und von Pima-Indianern abstammend.

Lade nötiges Paket: colorspace
Lade nötiges Paket: grid
VIM is ready to use.
Suggestions and bug-reports can be submitted at: https://github.com/statistikat/VIM/issues

Attache Paket: 'VIM'
Das folgende Objekt ist maskiert 'package:datasets':

    sleep
data("diabetes")
?diabetes

Teilaufgabe a

Wieviel fehlende Werte gibt es pro Variable? Verwenden Sie dafür die Funktion aggr() des R-Pakets VIM um einfache Statistiken und Plots zu erzeugen. Was sehen Sie?


 Missings per variable: 
                 Variable Count
              Pregnancies   111
                  Glucose     5
            BloodPressure    35
            SkinThickness   227
                  Insulin   374
                      BMI    11
 DiabetesPedigreeFunction     0
                      Age     0
                  Outcome     0

 Missings in combinations of variables: 
      Combinations Count    Percent
 0:0:0:0:0:0:0:0:0   336 43.7500000
 0:0:0:0:1:0:0:0:0   119 15.4947917
 0:0:0:1:1:0:0:0:0   170 22.1354167
 0:0:0:1:1:1:0:0:0     2  0.2604167
 0:0:1:0:1:0:0:0:0     2  0.2604167
 0:0:1:1:1:0:0:0:0    17  2.2135417
 0:0:1:1:1:1:0:0:0     6  0.7812500
 0:1:0:0:0:0:0:0:0     1  0.1302083
 0:1:0:0:1:0:0:0:0     4  0.5208333
 1:0:0:0:0:0:0:0:0    56  7.2916667
 1:0:0:0:0:1:0:0:0     1  0.1302083
 1:0:0:0:1:0:0:0:0    21  2.7343750
 1:0:0:0:1:1:0:0:0     1  0.1302083
 1:0:0:1:1:0:0:0:0    22  2.8645833
 1:0:1:1:1:0:0:0:0     9  1.1718750
 1:0:1:1:1:1:0:0:0     1  0.1302083

Rechter Plot: Die meisten fehlenden Werte weist die Variable Insulin auf, gefolgt von SkinThickness. Linker Plot: Skinthickness und Insulin Datenpunkte fehlen häufig zusammen.

Teilaufgabe b

Machen Sie einen Matrixplot. Sortieren Sie nach verschiedenen Variablen. Finden Sie eine MAR-Situation?

Es ist eine leichte Tendenz zu erkennen, dass bei den älteren Patientinnen eher Insulin- und SkinThickness Werte fehlen. Wobei bei den Jüngeren eher die Angaben zu den Schwangerschaften (Pregn) fehlen. Daher schätze ich die fehlenden Werte als “Missing at random” MAR ein.

Teilaufgabe c

Stellen Sie das Alter gegen die anderen Variablen mit einem Boxplot ( Funktion pbox()) dar. Gibt es Hinweise auf MAR Situationen?

Der BoxPlot bestätigt die Beobachtung aus dem Matrix-Plot: Es zu erkennen, dass bei den fehlenden Insulin- und SkinThickness Werte der Median für das Alter höher ist als bei den vorhandenen Daten. Bei den fehlendne Angaben zu den Schwangerschaften (Pregn) ist der Alters-Median eher tiefer. Daher schätze ich weiterhin die fehlenden Werte als “Missing at random” MAR ein.

### Teilaufgabe d {.justify} Fokussieren Sie nun auf die Variablen BMI und Insulin. Erzeugen Sie ein Histogramm und einen Spineplot für BMI und färben Sie die Punkte nach fehlenden Werte bei Insulin ein. Welcher Situation entspricht dies: MAR, MCAR oder MNAR?

Fehlende Insulin-Werte sind über die BMI-Werte gleich verteilt, im spine-Plot ein leichter trend zu erkennen, dass bei hohen BMI Werten eher Insulin Werte fehlen. MCAR

Teilaufgabe e

Erzeugen Sie einen parallelen Koordinatenplot, bei welchem fehlende Werte bei der Variablen Pregancies (Argument: highlight = Pregnancies”) hervorgehoben werden. Was sehen Sie?

Angaben zu Schwangerschaften fehlen bei jüngeren Patientinnen und zusammen mit Insulin und DiabetesPedigree. MAR Situation. Für die anderen fehlenden Werte zusammen mit der Schwangercshaft MCAR Sitatuation.

Aufgabe 2: Ozon

Verwenden Sie den Datensatz airquality aus dem Unterricht.

Teilaufgabe a

Wieviel fehlende Werte gibt es bei den einzelnen Variablen?


 Missings per variable: 
 Variable Count
    Ozone    37
  Solar.R     7
     Wind     0
     Temp     0
    Month     0
      Day     0

 Missings in combinations of variables: 
 Combinations Count   Percent
  0:0:0:0:0:0   111 72.549020
  0:1:0:0:0:0     5  3.267974
  1:0:0:0:0:0    35 22.875817
  1:1:0:0:0:0     2  1.307190

Die meisten fehlenden Werte weist die Variable Ozone auf, gefolgt von Solar.R. Beide fehlen selten zusammen. MCAR Situation

Teilaufgabe b

Erzeugen Sie einen Matrixplot und sortieren Sie die Daten geeignet. Können Sie eine MAR- Situation erkennen? Welche?

Im Mai uns Juni scheinen etwas häufiger die Ozon-werte zu fehlen. Mit den anderen Variablen ist kein Zusammenhang bzgl fehlender Werte erkennbar. MCAR Situation

Teilaufgabe c

Benutzen Sie die Mittelwert Imputation für die fehlenden Werte bei der Variable Ozone. Vergleichen Sie die Verteilung vor und nach Imputation.

[1] 1088.201
[1] 823.3096

Teilaufgabe c

Passen Sie eine multiple lineare Regression (Ozone ~ Wind + Temp + Solar.R) an die Originaldaten und auch an mit vervollständigten Daten aus c). Vergleichen Sie die Koeffi- zienten, die Fehlervarianz, R2 und Signifikanzen. Warum sollte man dem Modell mit den vervollständigten Daten weniger vertrauen?


===========================================================================================
                                              Dependent variable:                          
                    -----------------------------------------------------------------------
                             Ozone                             OzoneImp                    
                              (1)                     (2)                     (3)          
-------------------------------------------------------------------------------------------
Wind                       -3.334***               -2.780***               -2.717***       
                            (0.654)                 (0.550)                 (0.543)        
                                                                                           
Temp                       1.652***                1.348***                1.241***        
                            (0.254)                 (0.217)                 (0.209)        
                                                                                           
Solar.R                     0.060**                0.055***                                
                            (0.023)                 (0.020)                                
                                                                                           
SolarImp                                                                   0.058***        
                                                                            (0.020)        
                                                                                           
Constant                  -64.342***               -45.537**               -38.223**       
                           (23.055)                (19.528)                (18.883)        
                                                                                           
-------------------------------------------------------------------------------------------
Observations                  111                     146                     153          
R2                           0.606                   0.504                   0.480         
Adjusted R2                  0.595                   0.493                   0.470         
Residual Std. Error    21.181 (df = 107)       20.630 (df = 142)       20.898 (df = 149)   
F Statistic         54.834*** (df = 3; 107) 48.062*** (df = 3; 142) 45.851*** (df = 3; 149)
===========================================================================================
Note:                                                           *p<0.1; **p<0.05; ***p<0.01

Die Imputation hat weder die Signifikanz der Variablen noch das Vorzeichen der Koeffizienten verändert hat. Das adjustierte R2 des imputierten Modells ist etwas niedriger als das des Origi- nalmodells, dafür ist die Fehlervarianz des imputierten Modells minimal besser. Da die fehlenden Werte von Ozone durch deren Mittelwerte (also einem einzigen Wert) ersetzt werden, hat dies zur Folge, dass die Varianz der Variable reduziert wird. Bei einer Reduktion der Varianzen von Variablen werden auch deren Kovarianzen gemindert, was in aller Regel die Stärke der geschätzten Regressionskoeffizienten mindert. Auch verkleinert sich oftmals der Standardfehler, was zu falschen Ergebnissen von Signifikanztests führt. Es ist daher nicht empfehlenswert, eine Regression basierend auf Datensätzen mit Mittelwert Imputationen durchzuführen.

Teilaufgabe e

Führen Sie mit missForest eine Imputation durch und passen Sie eine multiple lineare Regression (Ozone ~ Wind + Temp + Solar.R) auf den vervollständigten Datensatz an. Vergleichen Sie die Koeffizienten.


===========================================================================================
                                              Dependent variable:                          
                    -----------------------------------------------------------------------
                             Ozone                 OzoneImp                  Ozone         
                              (1)                     (2)                     (3)          
-------------------------------------------------------------------------------------------
Wind                       -3.334***               -2.717***               -2.879***       
                            (0.654)                 (0.543)                 (0.508)        
                                                                                           
Temp                       1.652***                1.241***                1.550***        
                            (0.254)                 (0.209)                 (0.196)        
                                                                                           
Solar.R                     0.060**                                        0.065***        
                            (0.023)                                         (0.019)        
                                                                                           
SolarImp                                           0.058***                                
                                                    (0.020)                                
                                                                                           
Constant                  -64.342***               -38.223**              -62.789***       
                           (23.055)                (18.883)                (17.680)        
                                                                                           
-------------------------------------------------------------------------------------------
Observations                  111                     153                     153          
R2                           0.606                   0.480                   0.590         
Adjusted R2                  0.595                   0.470                   0.582         
Residual Std. Error    21.181 (df = 107)       20.898 (df = 149)       19.543 (df = 149)   
F Statistic         54.834*** (df = 3; 107) 45.851*** (df = 3; 149) 71.462*** (df = 3; 149)
===========================================================================================
Note:                                                           *p<0.1; **p<0.05; ***p<0.01

Teilaufgabe f

Führen Sie eine multiple (m = 5) Imputation mit MICE basierend auf Random Forest durch. Passen Sie wieder eine multiple lineare Regression (Ozone ~ Wind + Temp + Solar.R) auf die vervollständigten Datensätze an und aggregieren die Ergebnisse. Vergleichen Sie die Koeffizienten.


 iter imp variable
  1   1  Ozone  Solar.R
  1   2  Ozone  Solar.R
  1   3  Ozone  Solar.R
  1   4  Ozone  Solar.R
  1   5  Ozone  Solar.R
  2   1  Ozone  Solar.R
  2   2  Ozone  Solar.R
  2   3  Ozone  Solar.R
  2   4  Ozone  Solar.R
  2   5  Ozone  Solar.R
  3   1  Ozone  Solar.R
  3   2  Ozone  Solar.R
  3   3  Ozone  Solar.R
  3   4  Ozone  Solar.R
  3   5  Ozone  Solar.R
  4   1  Ozone  Solar.R
  4   2  Ozone  Solar.R
  4   3  Ozone  Solar.R
  4   4  Ozone  Solar.R
  4   5  Ozone  Solar.R
  5   1  Ozone  Solar.R
  5   2  Ozone  Solar.R
  5   3  Ozone  Solar.R
  5   4  Ozone  Solar.R
  5   5  Ozone  Solar.R
term estimate std.error statistic df p.value
(Intercept) -58.2598593 24.9695340 -2.333238 32.06519 0.0260675
Wind -3.0328089 0.7174505 -4.227203 32.21090 0.0001824
Temp 1.5243948 0.2626194 5.804578 48.51840 0.0000005
Solar.R 0.0637172 0.0264778 2.406441 27.02062 0.0232158

===========================================================================================
                                              Dependent variable:                          
                    -----------------------------------------------------------------------
                             Ozone                 OzoneImp                  Ozone         
                              (1)                     (2)                     (3)          
-------------------------------------------------------------------------------------------
Wind                       -3.334***               -2.717***               -2.879***       
                            (0.654)                 (0.543)                 (0.508)        
                                                                                           
Temp                       1.652***                1.241***                1.550***        
                            (0.254)                 (0.209)                 (0.196)        
                                                                                           
Solar.R                     0.060**                                        0.065***        
                            (0.023)                                         (0.019)        
                                                                                           
SolarImp                                           0.058***                                
                                                    (0.020)                                
                                                                                           
Constant                  -64.342***               -38.223**              -62.789***       
                           (23.055)                (18.883)                (17.680)        
                                                                                           
-------------------------------------------------------------------------------------------
Observations                  111                     153                     153          
R2                           0.606                   0.480                   0.590         
Adjusted R2                  0.595                   0.470                   0.582         
Residual Std. Error    21.181 (df = 107)       20.898 (df = 149)       19.543 (df = 149)   
F Statistic         54.834*** (df = 3; 107) 45.851*** (df = 3; 149) 71.462*** (df = 3; 149)
===========================================================================================
Note:                                                           *p<0.1; **p<0.05; ***p<0.01

Aufgabe 3: Adressen

Verwenden Sie die sleep Daten des R-Pakets VIM (siehe Unterricht)

library(VIM)
data(sleep)

Teilaufgabe a

Imputieren Sie die fehlenden Werte mit der k-Nearest Neighbor Methode. Wählen Sie ein geignetes Vorgehen, damit die imputierten Daten NonD + Dream = Sleep einhalten.

sleep.imp <- kNN(sleep)

Aufgabe 4: Analyse fehlender Werte mit Simulation

Für die folgende Übung benötigen Sie eine Funktion, welche künstliche Daten als auch MCAR, MAR und MNAR Situationen erzeugt.

simDat <- function(){
  
# generate bivariate normal data
  require(mvtnorm)
  x <- rmvnorm(n = 100, mean = c(10, 10),
  sigma = matrix(3 * c(1, 0.9, 0.9, 1), ncol = 2))
  x <- as.data.frame(x)
  colnames(x) <- c("xfull", "yfull")
  x <- x[order(x$xfull), ]
  
  # create artificial missings
  w <- sample(1:nrow(x), 10)
  lm1 <- lm(yfull ~ xfull, data = x)
  w3 <- resid(lm1) > quantile(resid(lm1), 0.9)
  w2 <- sample(50:nrow(x), 10, prob = (x$xfull[50:nrow(x)])^5)
  x$ymissMCAR <- x$ymissMAR <- x$ymissMNAR <- x$yfull
  x$ymissMCAR[w] <- NA
  x$ymissMAR[w2] <- NA
  x$ymissMNAR[w3] <- NA
  x$ymissMCAR_ind <- is.na(x$ymissMCAR)
  x$ymissMAR_ind <- is.na(x$ymissMAR)
  x$ymissMNAR_ind <- is.na(x$ymissMNAR)
  
  # add additional information
  x$MCAR <- ifelse(x$ymissMCAR_ind, "replaced by NA", "not modified")
  x$MAR <- ifelse(x$ymissMAR_ind, "replaced by NA", "not modified")
  x$MNAR <- ifelse(x$ymissMNAR_ind, "replaced by NA", "not modified")
  x$group <- factor(ifelse(x$yfull < 10, "low", "high"))
  
  return(x)
}

set.seed(123)
toyDataMiss <- simDat()
Lade nötiges Paket: mvtnorm

Teilaufgabe a

Erklären Sie was die Funktion simDat() macht.

Multivariate normale Dichte Simulation der Variablen x un y, mit dreifacher Kopie der Variablen y gefolgt von random Streichung von Werten aus y-Kopie1, gefolgt von streichung von Werten die mir einer linearen REgression ermittelt wurden aus y-Kopi2, und streichung von grossen Werten aus den 50 grössten Werten von y-Kopie3. in den weiteren Spalten wird die Information gespeichert wo WErte gelöscht wurden und welcher MCAR, MAR, MNAR Situation die fehlenden Werte angehören.

Teilaufgabe b

In der nachfolgenden Grafik werden die mit simDat() künstlich erzeugten Daten grafisch dargestellt. Beachten Sie, dass diese Untersuchung mit realen Daten nicht möglich ist (fehlende Werte sind dann unbekannt). In rot sind Werte markiert, die durch NA Werte ersetzt wurden. Interpretieren Sie auf Basis der Grafiken die MCAR-, MAR- und MNAR-Mechanismen für fehlende Werte.

library(ggplot2)
#toyDataMiss$yfull <- toyDataMiss$yfull + rnorm(nrow(toyDataMiss), 0, 1)
ggplot(toyDataMiss, aes(x = xfull, y = yfull)) +
  geom_point(aes(color = MCAR), size = 2) +
  #geom_point(aes(color = MAR), size = 2) +
  #geom_point(aes(color = MNAR), size = 1) +
  theme_minimal()

ggplot(toyDataMiss, aes(x = xfull, y = yfull)) +
  #geom_point(aes(color = MCAR), size = 3) +
  geom_point(aes(color = MAR), size = 2) +
  #geom_point(aes(color = MNAR), size = 1) +
  theme_minimal()

ggplot(toyDataMiss, aes(x = xfull, y = yfull)) +
  #geom_point(aes(color = MCAR), size = 3) +
  #geom_point(aes(color = MAR), size = 2) +
  geom_point(aes(color = MNAR), size = 2) +
  theme_minimal()

imdb_urls <- c(
"https://www.imdb.com/title/tt6751668/?ref_=hm_fanfav_tt_4_pd_fp1",
"https://www.imdb.com/title/tt0260991/",
"www.imdb.com/title/tt7282468/reviews",
"https://m.imdb.com/title/tt4768776/"
)
[1] "tt6751668" "tt0260991" "tt7282468" "tt4768776"

Teilaufgabe b

Die folgenden Dateinamen wurden in einer Studie mit Kamerafallen verwendet.

filenames <- c( 'S123.P2.C10_20120621_213422.jpg',
'S10.P1.C1_20120622_050148.jpg',
'S187.P2.C2_20120702_023501.jpg')

Der Buchstabe S steht für den Standort, P für die Parzelle innerhalb eines Standorts, C für die Kameranummer innerhalb der Parzelle. Die erste Zahlenfolge steht für JahrMonatTag und die zweite Zahlenfolge für StundeMinuteSekunde. Erstellen Sie eine Tabelle mit Spalten, die dem Standort, der Fläche, der Kamera, dem Jahr, dem Monat, dem Tag, der Stunde, der Minute und der Sekunde für diese drei Dateinamen entsprechen. Wir wollen also einen Code erstellen, der den folgenden Tibble erzeugt:

Site Plot Camera Year Month Day Hour Minute Second 1 S123 P2C10 2012 06 21 21 34 22 2 S10 P1C1 2012 06 22 5 01 48 3 S187 P2C2 2012 07 02 2 35 01

Spalten die nur Zahlen enthalten sollten vom Typ Integer sein.

Site Plot Camera Year Month Day Hour Minute Second
S123 P2 C10 2012 6 21 21 34 22
S10 P1 C1 2012 6 22 5 1 48
S187 P2 C2 2012 7 2 2 35 1

Aufgabe 5: Mahalanobis Distanz

Laden Sie den 3-dimensionalen Datensatz dat aus dem File ex-outlier.rda in R.

load('ex-outlier.rda')

Teilaufgabe a

Stellen Sie die 3 Variablen von dat paarweise gegeneinander dar. Gibt es auffällige Datenpunkte?

Teilaufgabe b

Berechnen Sie die Mahalanobis-Distanz und identifizieren Sie potentielle Ausreisser.

  [1] 47.52654866 12.22301519 11.50871587 10.86989628 10.84265734 10.82425676
  [7] 10.50328156 10.33451612 10.29792880 10.02157475  9.70441093  9.15960888
 [13]  8.37859032  7.99648855  7.75834565  7.66300957  7.58496955  7.11953673
 [19]  7.05942764  7.02898084  7.01915502  7.01103115  7.01066050  6.90212839
 [25]  6.34208896  6.24078746  6.18360568  6.11693224  6.11360782  6.11341025
 [31]  6.04272596  5.91808054  5.84857831  5.82257007  5.78453103  5.66539931
 [37]  5.57053872  5.43581310  5.42933877  5.42806493  5.34755296  5.32448404
 [43]  5.31336699  5.30529143  5.23861234  5.17013273  5.09177229  5.05773864
 [49]  5.04824873  4.96836653  4.95450021  4.94587345  4.90773178  4.81770003
 [55]  4.76948379  4.73746604  4.70227832  4.69480088  4.68185260  4.67226564
 [61]  4.65895878  4.58485688  4.57622875  4.55005417  4.54020095  4.52463421
 [67]  4.40884007  4.39151166  4.38816283  4.37427030  4.34955925  4.31007393
 [73]  4.30599591  4.28501712  4.27185267  4.12202359  4.10706045  4.10212333
 [79]  3.98652153  3.87631519  3.87615136  3.86970897  3.79873863  3.70355441
 [85]  3.65050977  3.62638947  3.61721739  3.51246528  3.50382550  3.49111282
 [91]  3.48248160  3.44717467  3.43785402  3.42761132  3.42090393  3.38205676
 [97]  3.35512331  3.33236911  3.32665889  3.31151904  3.25623394  3.25422892
[103]  3.25174917  3.21916039  3.17646821  3.15168500  3.13407741  3.08291683
[109]  3.06447947  3.04823756  2.95572381  2.95128005  2.94507015  2.89765695
[115]  2.81196757  2.79488668  2.77473972  2.77194530  2.74740432  2.72274520
[121]  2.72169706  2.67629787  2.64652497  2.60352803  2.59883638  2.57173040
[127]  2.57123451  2.56462739  2.55733152  2.50913279  2.50443392  2.48527146
[133]  2.47440746  2.46315847  2.43346329  2.41035288  2.40284355  2.39881635
[139]  2.37724448  2.37723569  2.37702418  2.36434655  2.35037212  2.31877418
[145]  2.29292793  2.29280942  2.25953990  2.22823957  2.21053980  2.20364464
[151]  2.20211539  2.19449531  2.18791856  2.15576064  2.12173882  2.10747849
[157]  2.09945065  2.09673348  2.09319484  2.08949267  2.05674985  2.01878759
[163]  2.01646347  2.01154821  2.00257940  2.00145147  1.98895359  1.97310202
[169]  1.94192406  1.92863240  1.91928851  1.91867951  1.91575131  1.90079724
[175]  1.88312613  1.86838337  1.85179826  1.84694901  1.80367384  1.79401888
[181]  1.77267700  1.71410917  1.70098694  1.62993221  1.62912871  1.61281808
[187]  1.58206241  1.53828842  1.52493462  1.50934173  1.48173788  1.47338737
[193]  1.43437299  1.43260898  1.43239310  1.42291567  1.38320642  1.37461642
[199]  1.35762479  1.33927638  1.33611090  1.33497326  1.33132094  1.32131518
[205]  1.30794395  1.27710713  1.27537423  1.26697773  1.25196557  1.25182664
[211]  1.23844540  1.23726179  1.16729999  1.15155251  1.14584684  1.13632680
[217]  1.13602836  1.12904913  1.11035241  1.10308897  1.09747146  1.08291480
[223]  1.07928089  1.07652162  1.07514333  1.07486182  1.05937258  1.05267479
[229]  1.04814846  1.03962284  1.02698811  1.02179639  1.01833895  1.00384864
[235]  0.96690517  0.96672691  0.92647769  0.89487368  0.88927829  0.88753350
[241]  0.88395130  0.87971158  0.87163172  0.86609024  0.85971213  0.83372098
[247]  0.83007250  0.80999196  0.78072794  0.77678551  0.77356113  0.75804262
[253]  0.75347637  0.71392178  0.68850825  0.67747474  0.65326613  0.62724056
[259]  0.61449632  0.58224434  0.57939446  0.56607257  0.56118775  0.50731066
[265]  0.50544316  0.49985281  0.49626381  0.48915087  0.46748652  0.44742045
[271]  0.42454046  0.42099205  0.39894501  0.39355159  0.38503586  0.36729783
[277]  0.32862318  0.32549119  0.32157293  0.31794877  0.31510609  0.31038312
[283]  0.30996876  0.30801783  0.28557365  0.27601435  0.27005109  0.24492629
[289]  0.24069707  0.23352405  0.23042294  0.22537811  0.22149381  0.13705710
[295]  0.11900038  0.11357422  0.07711886  0.07474457  0.06650652  0.03870804
[301]  0.02606036
[1] 301
[1] 301